# From v0.7 to v0.8

RMK v0.8 is a major release with lots of updates and improvements. The key changes in v0.8 include:

- **Dependency upgrades**: Updated many dependencies to their latest versions, including `esp-hal` v1.0, `trouble-host` v0.5, and others.

- **Tap-hold system refactoring**: Introduced the new `Morse` operation — a superset of tap-hold and tap-dance functionalities.

- **Simplified matrix configuration**: Replaced `input/output_pins` with `row/col_pins` in `keyboard.toml` and removed the `col2row` feature from `Cargo.toml`, making matrix setup more intuitive.

- **Dongle support**: Reintroduced dongle support for split keyboards.

- **General fixes and improvements**: Numerous bug fixes and refinements across the codebase.

## `Cargo.toml` Update

### Update RMK and embassy-* dependencies

First, update the `rmk` version to v0.8 and adjust its feature flag. Update versions of embassy-* dependencies and HALs as well:

```diff
# Update the following dependencies in your `Cargo.toml`.
# Keep feature gates unchanged unless otherwise specified.
- rmk = { version = "0.7", features = [
+ rmk = { version = "0.8", features = [
    "nrf52840_ble",
    "split",
    "async_matrix",
    "adafruit_bl",
-   "rapid_debouncer" # If applicable
-   "col2row" # If applicable
-   "bidirectional" # If applicable
] }
- embassy-executor = { version = "0.7.0" }
+ embassy-executor = { version = "0.9" }
- embassy-time = { version = "0.4", }
+ embassy-time = { version = "0.5" }
- embassy-nrf = { version = "0.3.1" }
+ embassy-nrf = { version = "0.8" }
- embassy-rp = { version = "0.4" }
+ embassy-rp = { version = "0.8" }
- bt-hci = { version = "0.3", default-features = false, features = ["defmt"] }
+ bt-hci = { version = "0.6", features = ["defmt"] }
- cyw43 = { version = "0.3.0", features = ["defmt", "firmware-logs", "bluetooth"] }
+ cyw43 = { version = "0.5", features = ["defmt", "firmware-logs", "bluetooth"] }
- cyw43-pio = { version = "0.4.0", features = ["defmt"] }
+ cyw43-pio = { version = "0.8.0", features = ["defmt"] }
```

### Remove patched dependencies

If your `Cargo.toml` contains `[patch.crates-io]`, remove them:

```diff

# Remove patched dependencies(if any)
- [patch.crates-io]
- embassy-sync = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- embassy-futures = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- embassy-executor = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- embassy-time = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- embassy-usb = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- embassy-embedded-hal = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- embassy-nrf = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- embassy-rp = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- cyw43 = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- cyw43-pio = { git = "https://github.com/embassy-rs/embassy.git", rev = "f35aa4005a63e8d478b2b95aaa2bfb316b72dece" }
- nrf-sdc = { git = "https://github.com/alexmoon/nrf-sdc.git", rev = "7be9b853e15ca0404d65c623d1ec5795fd96c204" }
- nrf-mpsl = { git = "https://github.com/alexmoon/nrf-sdc.git", rev = "7be9b853e15ca0404d65c623d1ec5795fd96c204" }
- trouble-host = { git = "https://github.com/embassy-rs/trouble", rev = "90c6359" }
- sequential-storage = { git = "https://github.com/tweedegolf/sequential-storage", rev = "4e9abcec36c259cb2c30840649ff8f9a6b6fcafc" }
```

### nRF specific update

For nRF, update nrf-sdc and nrf-mpsl to git version

```diff
- nrf-sdc = { version = "0.1.0", default-features = false, ..
+ nrf-sdc = { git = "https://github.com/alexmoon/nrf-sdc", rev = "11d5c3c", ..
- nrf-mpsl = { version = "0.1.0", default-features = false, ..
+ nrf-mpsl = { git = "https://github.com/alexmoon/nrf-sdc", rev = "11d5c3c", ..
```

### Pico W specific update

For Pico W, rename "rp2040_bl" feature to "rp2040", patch cyw43, and embassy-time-*

```diff
- rmk = { version = "0.7", features = ["pico_w_ble", "rp2040_bl"] }
+ rmk = { version = "0.8", features = ["pico_w_ble", "rp2040"] }
+ [patch.crates-io]
+ cyw43 = { git = "https://github.com/embassy-rs/embassy", rev = "faacad6" }
+ embassy-time-driver = { git = "https://github.com/embassy-rs/embassy", rev = "faacad6" }
+ embassy-time = { git = "https://github.com/embassy-rs/embassy", rev = "faacad6" }
```

### RP2040 specific update

For RP2040 wired split, rename "rp2040_bl" feature to "rp2040", remove "rp2040_pio" feature

```diff
- rmk = { version = "0.7", features = ["split", "rp2040_bl", "rp2040_pio"] }
+ rmk = { version = "0.8", features = ["split", "rp2040" ] }
```

### ESP32 specific update

For ESP32, update all esp-* dependencies to latest, add vial feature gate to `rmk` if you need vial support

```diff
rmk = { version = "0.8", default-features = false, features = [
    "esp32c3_ble",
    "log",
    "storage",
-   "col2row",
+   "vial",
] 
- esp-backtrace = { version = "0.16", features = [
+ esp-backtrace = { version = "0.18", features = [
    "esp32c3",
-   "exception-handler",
    "panic-handler",
    "println",
] }
- esp-storage = { version = "0.6.0", features = ["esp32c3"] }
- esp-hal = { version = "1.0.0-beta.1", features = ["esp32c3", "unstable"] }
- esp-hal-embassy = { version = "0.8.1", features = ["esp32c3"] }
- esp-alloc = { version = "0.8.0" }
- esp-println = { version = "0.14.0", features = ["esp32c3","log-04"] }
- esp-wifi = { version = "0.14.1", features = ["esp32c3", "ble"] }
+ esp-hal = { version = "1.0", features = ["esp32c3", "unstable"] }
+ esp-storage = { version = "0.8", features = ["esp32c3"] }
+ esp-alloc = { version = "0.9.0" }
+ esp-println = { version = "0.16.0", features = ["esp32c3", "log-04"] }
+ esp-radio = { version = "0.17", features = ["esp32c3", "unstable", "ble"] }
+ esp-rtos = { version = "0.2", features = ["esp32c3", "esp-radio", "embassy"] }
+ esp-bootloader-esp-idf = { version = "0.4", features = ["esp32c3", "log-04"] }
+ static_cell = "2"
```

### STM32 specific update

For STM32, update embassy-stm32 to v0.4

```diff
- embassy-stm32 = { version = "0.2", ... }
+ embassy-stm32 = { version = "0.4", ... }
```

## `keyboard.toml` Update

### `[matrix]` update

The main update of `keyboard.toml` is in the `[matrix]` section: 

- `row2col` options is not a "fake" option anymore, it "just works" in `keyboard.toml`
- `input/output_pins` is removed, `row/col_pins` is used instead

```diff
[matrix]
- input_pins = ["P1_00", "P1_01", "P1_02", "P1_07", "P1_08"]
- output_pins = ["P1_05", "P1_06", "P1_03", "P1_04"]
+ row_pins = ["P1_00", "P1_01", "P1_02", "P1_07", "P1_08"]
+ col_pins = ["P1_05", "P1_06", "P1_03", "P1_04"]

# RMK uses col2row as the default matrix diode direction, if you want to use a row2col matrix, add `row2col = true`
# row2col = true
```

### `[behavior]` update

Due to `Morse` update, `[behavior]` section is needed to be updated as well. 

The options are also updated, please refer to [Morse Configuration](../configuration/behavior#morse-and-tapdance) for details 

```diff
[behavior]
# The tap_hold setting is removed, use morse instead
- tap_hold = { .. }
+ morse = { .. }
```

### Other configuration update

For other configuration updates, please refer to [Configuration](../configuration) section


## Dongle support

Dongle support is back! Checkout [config example](https://github.com/HaoboGu/rmk/tree/main/examples/use_config/nrf52840_ble_split_dongle) and [Rust example](https://github.com/HaoboGu/rmk/tree/main/examples/use_rust/nrf52840_ble_split_dongle) for more details.

::: info
For Rust code users, you need to add a `keyboard.toml` with following content to your project to specify the number of peripherals:

```toml title="keyboard.toml"
[rmk]
split_peripherals_num = 2
``` 

:::



